package com.hexinfo.dmpro.common.base;

import com.github.pagehelper.PageInfo;
import com.hexinfo.dmpro.common.utils.ReflectionUtils;

import java.util.List;

/**
 * Created by JunjieM on 2020-3-14.
 */
public class BaseService {

    /**
     * 调用分页插件进行分页查询
     *
     * @param mapper          Dao对象，MyBatis的 Mapper
     * @param queryMethodName 要分页的查询方法名
     * @param page            分页请求
     * @param args            方法参数
     * @return
     */
    @SuppressWarnings({"unchecked", "rawtypes"})
    public PageResult selectPage(Object mapper, String queryMethodName, Page page, Object... args) {
        // 利用反射调用查询方法
        Object result;
        try {
            // 设置分页参数
            com.github.pagehelper.page.PageMethod.startPage(page.getPageIndex() + 1, page.getPageSize());
            result = ReflectionUtils.invoke(mapper, queryMethodName, args);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        if (result == null) {
            return new PageResult(null, page);
        } else {
            PageInfo pageInfo = new PageInfo((List) result);
            page.setTotal(pageInfo.getTotal());
            return new PageResult(pageInfo.getList(), page);
        }
    }

}
